-- 1、参数列表
--1.1.优惠卷id
local voucherId = ARGV[1]
-- 1.2.用户id
local userId = ARGV[2]
--1.3 订单id
local orderId = ARGV[3]

--2、数据key
--2.1.库存key
local stockKey = 'seckill:stock:' .. voucherId
--2.2.订单key
local orderKey = 'seckill:order' .. voucherId

--3、脚本业务
--3.1.判断库存是否充足 get stockKey
if (tonumber(redis.call('get', stockKey)) <= 0) then
    --3.2.库存不足
    return 1
end
-- 3.3.判断用户是否下单 SISMEMBER orderKey userId
if (redis.call('sismember',orderKey,userId)) == 1 then
    -- 3.4.说明用户存在  重复下单
    return 2
end

--3.5.扣减库存
redis.call('incrby',stockKey,-1)
--3.6.下单 --保存用户id到集合中 --sadd orderKey userId
redis.call('sadd',orderKey,userId)
-- 4 发送消息到队列中 --XADD 队列名称 消息id （*）消息键值对 k1 v1 k2 v2
redis.call('xadd','stream.order','*','userId',userId,'voucherId',voucherId,'id',orderId)
return 0
